package TextBookCode.unit2.unit2_2;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class JdkProxyExample implements InvocationHandler {
    //真实对象
    private Object target = null;

    public JdkProxyExample() {
    }

    public Object bind(Object target) {
        this.target = target;
        return Proxy.newProxyInstance(
                //类加载           类加载器
                target.getClass().getClassLoader(),
                //代理对象挂在接口下
                target.getClass().getInterfaces(),
                //代理对象
                this);
    }

    //此处invoke方法在调用类的时候默认执行，与method的invoke()不一样
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("进入代理逻辑方法");
        System.out.println("在调度真实对象之前的服务");
        Object obj = method.invoke(this.target, args);
        System.out.println("在调度真实对象之后的服务");
        return obj;
    }
}
